package com.sistemagestion.productos.view;

import java.util.ArrayList;
import java.util.List;

import android.app.Activity;
import android.os.Bundle;
import android.support.v4.app.FragmentActivity;
import android.view.View;
import android.view.Window;
import android.view.WindowManager;
import android.view.View.OnClickListener;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Spinner;
import android.widget.Toast;

import com.sistemagestion.R;
import com.sistemagestion.BO.ProductoBO;
import com.sistemagestion.BO.RubroBO;
import com.sistemagestion.Entities.Producto;
import com.sistemagestion.Entities.Rubro;
import com.sistemagestion.Utils.Constantes;
import com.sistemagestion.Utils.DialogConfirmacion;
import com.sistemagestion.Utils.DialogConfirmacion.IDialogListenerButton;

public class ProductoEditActivity extends FragmentActivity implements IDialogListenerButton{

	// BO Components
	private ProductoBO productobo = new ProductoBO();
	private RubroBO rubrobo = new RubroBO();

	// View Components
	EditText txtNombre;
	EditText txtCodigo;
	EditText txtPrecio;
	EditText txtStock;
	Spinner spnRubro;
	Button btnAceptar;
	Button btnCancelar;

	// Model Components
	Producto _Producto;
	List<Rubro> listaRubro = new ArrayList<Rubro>();

	public Constantes.Operations operation = Constantes.Operations.ADD;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
		requestWindowFeature(Window.FEATURE_NO_TITLE);
		super.onCreate(savedInstanceState);
		setContentView(R.layout.lyt_producto_edit);
		Bundle b = getIntent().getExtras();
		operation = (Constantes.Operations) b.getSerializable("OPERATION");
		_Producto = (Producto) b.getSerializable("PRODUCTO");
		initView();
		if (operation == Constantes.Operations.EDIT)
			MostrarRegistro();
	}

	private void MostrarRegistro() {
		if (_Producto == null)
			return;
		txtNombre.setText(_Producto.getNombre());
		txtCodigo.setText(_Producto.getCodigo().toString());
		txtPrecio.setText(_Producto.getPrecioVenta().toString());
		txtStock.setText(_Producto.getStock().toString());
		int posRubro = listaRubro.indexOf(rubrobo.getById(_Producto
				.getIdRubro()));
		spnRubro.setSelection(posRubro);
	}

	private void LimpiarPantalla() {
		txtNombre.setText("");
		txtCodigo.setText("");
		txtPrecio.setText("");
		txtStock.setText("");
	}

	private void initView() {

		txtNombre = (EditText) findViewById(R.id.edtNombre);
		txtCodigo = (EditText) findViewById(R.id.edtCodigo);
		txtPrecio = (EditText) findViewById(R.id.edtPrecioVenta);
		txtStock = (EditText) findViewById(R.id.edtStockActual);
		spnRubro = (Spinner) findViewById(R.id.spnRubro);
		FillSpnRubro();
		btnAceptar = (Button) findViewById(R.id.btnAceptar);
		btnCancelar = (Button) findViewById(R.id.btnCancelar);

		btnAceptar.setOnClickListener(new OnClickListener() {
			@Override
			public void onClick(View arg0) {
				
				if (ValidarCampos() == true) {
					DialogConfirmacion dialogo = new DialogConfirmacion();
					dialogo.show(getSupportFragmentManager(), "editar");
				} else {
					ValidarCampos();
				}
			}
		});

		btnCancelar.setOnClickListener(new OnClickListener() {
			@Override
			public void onClick(View arg0) {
				finish();
			}
		});

	}

	private void Guardar() {
		if (operation == Constantes.Operations.ADD)
			_Producto = new Producto();
		_Producto.setNombre(txtNombre.getText().toString());
		_Producto.setCodigo(Integer.parseInt(txtCodigo.getText().toString()));
		_Producto.setPrecioVenta(Float.parseFloat(txtPrecio.getText()
				.toString()));
		_Producto.setStock(Integer.parseInt(txtStock.getText().toString()));
		_Producto.setIdRubro(((Rubro) spnRubro.getSelectedItem()).getIdRubro());

		if (productobo.saveProducto(_Producto) > 0) {
			LimpiarPantalla();
			Toast.makeText(this, "Operacion exitosa", Toast.LENGTH_LONG).show();
		} else
			Toast.makeText(this, "Ha ocurrido un error!", Toast.LENGTH_LONG)
					.show();
	}

	private Boolean ValidarCampos() {
		if (txtCodigo.getText().length() == 0) {
			Toast.makeText(this, "El Codigo es obligatorio", Toast.LENGTH_LONG)
					.show();
			txtCodigo.requestFocus();
			return false;
		}
		if (txtNombre.getText().length() == 0) {
			Toast.makeText(this, "EL Nombre es obligatorio", Toast.LENGTH_LONG)
					.show();
			txtNombre.requestFocus();
			return false;
		}
		if (txtPrecio.getText().length() == 0) {
			Toast.makeText(this, "El precio es obligatorio", Toast.LENGTH_LONG)
					.show();
			txtPrecio.requestFocus();
			return false;
		}
		if (txtStock.getText().length() == 0) {
			Toast.makeText(this, "El stock es obligatorio", Toast.LENGTH_LONG)
					.show();
			txtStock.requestFocus();
			return false;
		}
		return true;
	}

	private void FillSpnRubro() {
		listaRubro = rubrobo.getAll();
		ArrayAdapter<Rubro> adapter = new ArrayAdapter<Rubro>(this,
				android.R.layout.simple_gallery_item, listaRubro);
		spnRubro.setAdapter(adapter);
	}

	@Override
	public void onPositiveButton() {
		
		Guardar();
		finish();
	}

	@Override
	public void onCancelButton() {
		// TODO Auto-generated method stub
		
	}
}
